﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Controls_AllowPagingDataList : System.Web.UI.UserControl
{

    private DataList DList;
    //private Repeater Repeat;

    public ObjectDataSource ObjDataSource { get; set; }

    // ObjectCotrol này là (DataList hay Repeater)
    public object ObjectControl { get; set; }

    public int CurrentPage
    {
        get
        {
            object curPage = (object)ViewState["_CurrentPage"];
            if (curPage != null)
                return (int)curPage;
            else
                return 0;
        }
        set
        {
            ViewState["_CurrentPage"] = value;
        }
    }

    // Số Record muốn Show trên 1 trang
    public int PageSize { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        //if (Page.IsPostBack)
            GetData();
    }

    private int GetData()
    {
        PagedDataSource pageDataSource = new PagedDataSource();
        // Gán số record trên 1 trang
        pageDataSource.PageSize = PageSize;
        //Lấy Data từ ObjectDataSource( lấy từ hàm select)
        pageDataSource.DataSource = ObjDataSource.Select();
        //Cho phép Phân Trang
        pageDataSource.AllowPaging = true;
        //Lấy tổng số trang có được từ Data
        int countAllPage = pageDataSource.PageCount;
        //lấy trang hiện tại
        pageDataSource.CurrentPageIndex = CurrentPage;

        if (pageDataSource.Count > 0)
        {
            //Hiện Control ButtonFirstRecord, Enable là false khi Trang hiện tại là First Page 
            btnFirstRecord.Visible = true;
            btnFirstRecord.Enabled = !pageDataSource.IsFirstPage;

            //Hiện Control ButtonLastRecord, Enable là false khi Trang hiện tại là Last Page 
            btnLastRecord.Visible = true;
            btnLastRecord.Enabled = !pageDataSource.IsLastPage;

            //Hiện Control ButtonNext, Enable là false khi Trang hiện tại là Last Page
            btnNext.Visible = true;
            btnNext.Enabled = !pageDataSource.IsLastPage;

            //Hiện Control ButtonPrevious, Enable là false khi Trang hiện tại là First Page 
            btnPrevious.Visible = true;
            btnPrevious.Enabled = !pageDataSource.IsFirstPage;

            //Show Thông Tin Trang hiện Tại trong tổng số trang
            lblCurrentPage.Visible = true;
            lblCurrentPage.Text = "Trang " + (CurrentPage + 1).ToString() + "  / " + countAllPage.ToString();
        }
        else
        {
            //Vì ko có dữ liệu nên sẽ ẩn hết tất cả các Control Phân trang
            btnFirstRecord.Visible = false;
            btnLastRecord.Visible = false;
            btnPrevious.Visible = false;
            btnNext.Visible = false;
            lblCurrentPage.Visible = false;
        }

        if (ObjectControl is DataList)
        {
            DList = (DataList)ObjectControl;
            DList.DataSource = pageDataSource;
            DList.DataBind();
        }

        #region Nếu ObjectControl là Repeater thì thêm đoạn code này vào
        //else if (ObjectControl is Repeater)
        //{
        //    Repeat = (Repeater)ObjectControl;
        //    Repeat.DataSource = pageDataSource;
        //    Repeat.DataBind();
        //}
        #endregion

        return pageDataSource.PageCount;

    }

    protected void btnFirstRecord_Click(object sender, EventArgs e)
    {
        // Show Trang Đầu Tiên
        CurrentPage = 0;
        GetData();
    }
    protected void btnPrevious_Click(object sender, EventArgs e)
    {
        CurrentPage -= 1;
        GetData();
    }
    protected void btnNext_Click(object sender, EventArgs e)
    {
        CurrentPage += 1;
        GetData();
    }
    protected void btnLastRecord_Click(object sender, EventArgs e)
    {
        //Show Trang Cuối Cùng
        CurrentPage = GetData() - 1;
        GetData();
    }
}
